Base.:(+)(x::S, y::T) where T<:NanosecondBased where S<:AbstractClock = (S)(Clock(x) + y)
Base.:(+)(x::S, y::T) where T<:MonthBased where S<:AbstractClock = (S)(Clock(x) + y)
Base.:(+)(x::T, y::S) where T<:NanosecondBased  where S<:AbstractClock = (S)(Clock(y) + x)
Base.:(+)(x::T, y::S) where T<:MonthBased where S<:AbstractClock = (S)(Clock(y) + x)
Base.:(-)(x::S, y::T) where T<:NanosecondBased where S<:AbstractClock = (S)(Clock(x) - y)
Base.:(-)(x::S, y::T) where T<:MonthBased where S<:AbstractClock = (S)(Clock(x) - y)

for P in [:Year, :Month, :Years, :Quarters, :Months,
          :year, :month, :years, :quarters, :months,
          :Week, :Day, :Hour, :QuarterHour, :Minute,
          :Second, :Millisecond, :Microsecond, :Nanosecond,
          :Weeks, :Days, :Hours, :QuarterHours, :Minutes,
          :Seconds, :Milliseconds, :Microseconds, :Nanoseconds,
          :week, :day, :hour, :quarterhour, :minute,
          :second, :millisecond, :microsecond, :nanosecond,
          :weeks, :days, :hours, :quarterhours, :minutes,
          :seconds, :milliseconds, :microseconds,
          :nanoseconds ]
    @eval $P(x::T) where T<:AbstractClock = $P(Clock(x))
end
